/***************************************************
 @Name :        小铭同学
 @Time :        2025-09-03
 @Email :       LiaoMingWJ233@163.com
 @Comment :     水表 电表 控件类
 @FileName :    waterelectricmeter.h
 @Version :     1.0
****************************************************/


#ifndef WATELECTRICMETER_H
#define WATELECTRICMETER_H

#include <QWidget>
#include <QPainter>

/**
 * @brief 水电表控件类
 * 
 * 这个类用于绘制水表和电表的外观，支持显示当前读数和设置最大值最小值
 */
class WaterElectricMeter : public QWidget
{
    Q_OBJECT
    Q_PROPERTY(double value READ value WRITE setValue NOTIFY valueChanged)
    Q_PROPERTY(double minValue READ minValue WRITE setMinValue)
    Q_PROPERTY(double maxValue READ maxValue WRITE setMaxValue)
    Q_PROPERTY(MeterType meterType READ meterType WRITE setMeterType)
    Q_PROPERTY(QString unit READ unit WRITE setUnit)

public:
    /**
     * @brief 仪表类型枚举
     */
    enum MeterType {
        WaterMeter,  ///< 水表
        ElectricMeter ///< 电表
    };
    Q_ENUM(MeterType)

    explicit WaterElectricMeter(QWidget *parent = nullptr);

    // 获取和设置当前值
    double value() const;
    void setValue(double value);

    // 获取和设置最小值
    double minValue() const;
    void setMinValue(double minValue);

    // 获取和设置最大值
    double maxValue() const;
    void setMaxValue(double maxValue);

    // 获取和设置仪表类型
    MeterType meterType() const;
    void setMeterType(MeterType type);

    // 获取和设置单位
    QString unit() const;
    void setUnit(const QString &unit);

    // 获取和设置表盘颜色
    QColor dialColor() const;
    void setDialColor(const QColor &color);

    // 获取和设置指针颜色
    QColor needleColor() const;
    void setNeedleColor(const QColor &color);

    // 获取和设置文本颜色
    QColor textColor() const;
    void setTextColor(const QColor &color);

    QSize sizeHint() const override;
    QSize minimumSizeHint() const override;

signals:
    void valueChanged(double value);

protected:
    void paintEvent(QPaintEvent *event) override;
    void resizeEvent(QResizeEvent *event) override;

private:
    /**
     * @brief 绘制表盘
     * @param painter 绘图对象
     */
    void drawDial(QPainter *painter);
    
    /**
     * @brief 绘制刻度
     * @param painter 绘图对象
     */
    void drawScale(QPainter *painter);
    
    /**
     * @brief 绘制指针
     * @param painter 绘图对象
     */
    void drawNeedle(QPainter *painter);
    
    /**
     * @brief 绘制数值显示
     * @param painter 绘图对象
     */
    void drawValue(QPainter *painter);
    
    /**
     * @brief 绘制标题
     * @param painter 绘图对象
     */
    void drawTitle(QPainter *painter);

    double m_value;         ///< 当前值
    double m_minValue;      ///< 最小值
    double m_maxValue;      ///< 最大值
    MeterType m_meterType;  ///< 仪表类型
    QString m_unit;         ///< 单位

    QColor m_dialColor;     ///< 表盘颜色
    QColor m_needleColor;   ///< 指针颜色
    QColor m_textColor;     ///< 文本颜色

    QRectF m_dialRect;      ///< 表盘矩形区域
};

#endif // WATELECTRICMETER_H
